草庐IT

C++ 对和指针

全部标签

c++ - C++ 智能指针是无锁的吗?

std::unique_ptr和/或std::shared_ptr的以下操作是否是无锁的?取消引用,即read(*myPtr)或myPtr->getSomething()删除引用,即使用std::move(myUniquePtr)或当std::shared_ptr超出范围时。在我的例子中,我并没有从多个线程同时访问这些指针。我只是好奇我是否可以在高优先级、无锁线程上专门使用它们。指针管理的对象在高优先级回调之前由主线程分配,并且在回调停止之前不会被释放。谢谢! 最佳答案 通过合理的实现,您可以假设:std::unique_ptr:对

c++ - 在 C++11 中使用不带托管共享指针的 shared_from_this()

假设我有一个类是enable_shared_from_this的子类。这个基类的文档说在调用shared_from_this之前应该有一个拥有这个类的共享指针。使用new分配类并调用shared_from_this来管理对象是否安全? 最佳答案 正如其他用户已经提到的,在不属于shared_ptr的实例上调用shared_from_this将导致未定义的行为(通常是异常,但也有没有保证)。那么,为什么还要一个答案呢?因为我自己做了一次同样的问题并得到了几乎相同的答案,然后我开始为另一个问题而苦苦挣扎,这个问题紧随其后-我如何保证所有

c++ - 从基类的指针访问派生类的成员

我有一个从另一个派生的类,我使用一个基类指针数组来保存派生类的实例,但是因为数组是基类的,所以我无法使用指针访问属于派生类的成员符号,我是否可以使用简单的命令访问这些成员,或者我是否应该重写我的基类以定义成员并仅在派生类中使用它?例子:classA{public:intfoo;};classB:publicA{public:charbar;};classC:publicA{inttea;};intmain(){A*arr[5];arr[0]=newB;chartest=arr[0]->bar;//visualstudiohighlightsthiswithanerror"classAh

c++ - 为什么派生类不能通过指向基类的指针访问其基类的 protected 成员?

这是code:classTestA{protected:inttest=12;public:TestA(){couttest;}~TestB(){}};intmain(){TestA*pTestA=newTestA();TestB*pTestB=newTestB(pTestA);}我正在尝试使用指向TestA类型对象的指针访问protected成员(因此,TestA的实例).TestB也派生自TestA为什么我无法访问它?它只能在我需要它的类(class)“内部”访问吗?不在外部使用指针/直接声明? 最佳答案 当public继承自基

c++ - boost 侵入式指针

我对boost的侵入式指针有点困惑。定义说:"Everynewintrusive_ptrinstanceincrementsthereferencecountbyusinganunqualifiedcalltothefunctionintrusive_ptr_add_ref,passingitthepointerasanargument.Similarly,whenanintrusive_ptrisdestroyed,itcallsintrusive_ptr_release;thisfunctionisresponsiblefordestroyingtheobjectwhenitsre

c++ - 我应该对已经定义的智能指针使用 make_unique 还是 reset() ?

假设我有一个函数可以选择分配一个对象并返回它://Classmemberstd::dequem_receiveQueue;//Functioninclassthatoperatesonthequeuetemplatestd::unique_ptrGet(){std::unique_ptrresponse;if(!m_receiveQueue.empty()){response=std::make_unique(m_receiveQueue.front());m_receiveQueue.pop();}returnresponse;}我应该改为:response.reset(newT{m

c# - 如何将函数指针从 C# 传递到 C++ Dll?

C++dll中定义的函数是:staticdouble(*Func1)(double);EXTERN_C__declspec(dllexport)__stdcalldoubleTestDelegate(double(*fun)(double)){Func1=fun;returnFunc1(25.0);}voidMy_Real_purpose(){SomeClassa;a.SetFunction(Func1);//DefinebehaviourofabyC#inruntimea.DoSomething();//EvenIwantitrunsinanotherthread!}我试着在C#中这

c++ - 引用 static_cast 的引用和指向 static_cast 指针的指针的成本

对引用static_cast的引用是否与指向指针static_cast的指针具有相同的运行时间成本?例如classB;classA:publicclassB;Aobj;A&ref=obj;A*ptr=&obj;//1static_cast(ref);//2static_cast(ptr); 最佳答案 不,它们并不总是具有相同的成本。启用优化后,它们总是具有相同或非常接近相同的成本。如果您向上或向下转换继承层次结构,其中任何一个涉及多重继承,或者一个多态类继承自一个非多态类,然后指针的static_cast可能会产生condition

带指针参数的 C++ 函数

我正在编写一个C++程序,将数据输出到一个文件,生成一个python脚本并调用pyplot进行绘图。但是,当我用指针传递参数时,它可以正常编译,但不能运行。它返回错误。当我使用XcodeDebug模式并逐步执行它时,它偶尔会给出正确的结果,但并非总是如此。有时它也会返回错误。我怀疑这可能是由某些内存分配问题引起的,但我无法确定到底是什么问题。我的代码如下:1)主要#include#include#include#include"PyCPlot.h"usingnamespacestd;doublepi=3.1415926;intmain(intargc,constchar*argv[])

c++ - 这是编写指针数组的正确方法吗?

我有一个类“员工”我想为此创建一个指针数组。这会成功吗?Employee*employeeArr[size];在我的“for循环”中是这样的employeeArr[i]=newEmployee(surname,firstname,gender);//constructorimplementedEmployee(para1,para2,para3)或者我应该写Employee*employeeArr=newEmployee[size];然后用“点”填充所有内容employeeArr[i].setSurname(surname);你能解释一下原因吗,我对指针真的很陌生。第二个是别人告诉我的